﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Collections;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using System.Globalization;


namespace LectorHuellaC
{
    public partial class FormEntradasSalidas : Form
    {
        String versionapp = "A 1.0";
        DataTable datosEmpSuc = new DataTable();

        public FormEntradasSalidas()
        {
            InitializeComponent();
            cargarUsuarios();
            cargarDatosEmpSuc();
            this.Text = ":: Reloj Checador :: " + versionapp + " (" + this.Text + ")";
        }

        private void btnReporteIndividual_Click(object sender, EventArgs e)
        {
            string sqlincidencias = "";
            String sql="";
            MySqlConnection cn;
            MySqlCommand cm;
            MySqlCommand cm_incidencias;
            MySqlDataAdapter da;
            MySqlDataAdapter adapterinc;


            string id_empresa = Settings1.Default.id_empresa.ToString();
            string IdSucursal = Settings1.Default.IdSucursal;

            if (dtFinal.Value < dateTimePickerPeriodo.Value)
            {
                MessageBox.Show("La fecha final no debe ser menor que la fecha inicial", "Consulta de Incidencias", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            string dfin = dtFinal.Value.ToString("yyyyMMdd");
            string dini = dateTimePickerPeriodo.Value.ToString("yyyyMMdd");
            string Anio = dateTimePickerPeriodo.Value.Year.ToString();

            TimeSpan ts = dtFinal.Value - dateTimePickerPeriodo.Value;
            int differenceInDays = ts.Days+1;

            //string ConsultaBD = "Select emp.nombre as Nombre,TipoIncidencia,Fecha,Observaciones from reloj_incidencias inc inner join reloj_empleados emp on emp.id_empleado = inc.id_empleado where inc.id_empresa = " + id_empresa + " And inc.IdSucursal = '" + IdSucursal + "' And Fecha between '" + dini + "' And '" + dfin + "' ";
            ReportEntradasSalidas rpES = new ReportEntradasSalidas();
            //CRPEntradasSalidasInd reportEnSalInd = new CRPEntradasSalidasInd();
            //CRPEntradasSalidasGeneral reportEnSalGen = new CRPEntradasSalidasGeneral();
            String id_user = Convert.ToString(cbUsuario.SelectedValue);
            if (!id_user.Equals("-1"))
            {

                sql = "SELECT id_sucursal,"
                              + "sc_nombre, empresa,"
                              + "Nombre,TipoRegistro"
                              + ",FechaHoraPC, FechaHoraServer,versionReloj"
                              + ",Fechanow FROM rep_entradas_salidas_ind WHERE "
                              + " id_empleado=?id_empleado"
                              + " AND FechaHoraServer between ?dini  AND ?dfin "
                              + " AND id_empresa = ?id_empresa ";

                sqlincidencias = "select id_empleado,TipoIncidencia,Fecha from reloj_incidencias "
                                 + " where reloj_incidencias.id_empresa=?id_empresa "
                                 + " and reloj_incidencias.id_empleado=?id_empleado"
                                 + " AND Fecha between ?dini  AND ?dfin ";
            }
            else
            {
                btnReporte.Enabled = false;
                return;
            }
                /*
            else
            {
                sql = "SELECT id_empleado,"
                + " totalRegistros,"
                +" id_empresa,"
                +" id_sucursal,"
                +" sc_nombre,"
                +" empresa,"
                +" Nombre,"
                + " id_empresa,"
                +" TipoRegistro,"
                +" FechaHoraPC,"
                +" FechaHoraServer,"
                +" Fechanow"
                + " from rep_entradas_salidas_gen where id_sucursal = ?id_sucursal and id_empresa =?id_empresa ";
            }*/

            cn = new MySqlConnection("Data Source=localhost;Database=pvsfelnet;User ID=root; Password=root; Allow Zero Datetime=True; CHARSET=latin1");
            cn.Open();

            cm = new MySqlCommand();
            cm.CommandText = sql;
            cm.CommandType = CommandType.Text;
            cm.Connection = cn;
            cm.Parameters.Add("?id_empleado", MySqlDbType.VarChar);
            cm.Parameters["?id_empleado"].Value = id_user;
            cm.Parameters.Add("?dini", MySqlDbType.VarChar);
            cm.Parameters["?dini"].Value = dini;
            cm.Parameters.Add("?dfin", MySqlDbType.VarChar);
            cm.Parameters["?dfin"].Value = dfin;
            cm.Parameters.Add("?id_empresa", MySqlDbType.VarChar);
            cm.Parameters["?id_empresa"].Value = id_empresa;
            //cm.Parameters.Add("?id_sucursal", MySqlDbType.VarChar);
            //cm.Parameters["?id_sucursal"].Value = IdSucursal;
            cm.Parameters.Add("?id_empresa", MySqlDbType.VarChar);
            cm.Parameters["?id_empresa"].Value = id_empresa;


            da = new MySqlDataAdapter(cm);
            
            DataTable table = new DataTable();
            da.Fill(table);

            cm_incidencias = new MySqlCommand();
            cm_incidencias.CommandText = sqlincidencias;
            cm_incidencias.CommandType = CommandType.Text;
            cm_incidencias.Connection = cn;
            cm_incidencias.Parameters.Add("?id_empleado", MySqlDbType.VarChar);
            cm_incidencias.Parameters["?id_empleado"].Value = id_user;
            cm_incidencias.Parameters.Add("?dini", MySqlDbType.VarChar);
            cm_incidencias.Parameters["?dini"].Value = dini;
            cm_incidencias.Parameters.Add("?dfin", MySqlDbType.VarChar);
            cm_incidencias.Parameters["?dfin"].Value = dfin;
            cm_incidencias.Parameters.Add("?id_empresa", MySqlDbType.VarChar);
            cm_incidencias.Parameters["?id_empresa"].Value = id_empresa;

            adapterinc = new MySqlDataAdapter(cm_incidencias);
            DataTable table_incid = new DataTable();
            adapterinc.Fill(table_incid);

            DataTable table_2 = new DataTable();
            table_2.Columns.Add("Index");
            table_2.Columns.Add("Sucursal");
            table_2.Columns.Add("Fecha");
            table_2.Columns.Add("Entrada");
            table_2.Columns.Add("Presencia1");
            table_2.Columns.Add("Presencia2");
            table_2.Columns.Add("Presencia3");
            table_2.Columns.Add("Presencia4");
            table_2.Columns.Add("Salida");
            table_2.Columns.Add("MasPresencia");
            table_2.Columns.Add("Incidencia");

           
            //se llena la tabla con los registros equivalentes alos dias entre las fechas
           for (int x = 0; x<differenceInDays; x++ )
           {
               DataRow newRow = table_2.NewRow();
               newRow["Index"] = x;
               newRow["Fecha"] = Convert.ToDateTime(dateTimePickerPeriodo.Value.AddDays(x)).ToString("yyyy/MM/dd");
               newRow["Incidencia"] = "FALTA";
               table_2.Rows.InsertAt(newRow,x);
           }

            //Aqui se recorre el datatable que trae todas los datos de entradas y salidas y las coloca en table_2
           foreach (DataRow row in table.Rows)
           {
               CultureInfo ci = CultureInfo.InvariantCulture;
               string fecharow = Convert.ToDateTime(row["FechaHoraServer"].ToString()).ToString("yyyy/MM/dd");
               string entrada = "";
               string salida = "";
               string presencia = "";
               string sucursal="";
               if (row["TipoRegistro"].ToString().Equals("ENTRADA"))
               {
                   entrada = Convert.ToDateTime(row["FechaHoraServer"]).ToString("hh:mm:ss.F", ci);
               }


               if (row["TipoRegistro"].ToString().Equals("SALIDA"))
               {
                   salida = Convert.ToDateTime(row["FechaHoraServer"]).ToString("hh:mm:ss.F", ci);
               }

               if (row["TipoRegistro"].ToString().Equals("PRESENCIA"))
               {
                   presencia = Convert.ToDateTime(row["FechaHoraServer"]).ToString("hh:mm:ss.F", ci);
               }

               sucursal = row["sc_nombre"].ToString();

               //aqui se van colocando las horas en la tabla que se utilizara para el reporte
               int index = 0;
               int extpresen = 1;
                foreach(DataRow rowtable_2 in table_2.Rows){
                    
                    if (rowtable_2["Fecha"].ToString().Equals(Convert.ToDateTime(fecharow).ToString("yyyy/MM/dd")))
                    {
                        if (row["TipoRegistro"].ToString().Equals("ENTRADA"))
                        {
                            table_2.Rows[index]["Entrada"] = entrada;
                        }

                        if (row["TipoRegistro"].ToString().Equals("SALIDA"))
                        {
                            table_2.Rows[index]["Salida"] = salida;
                        }

                        if (row["TipoRegistro"].ToString().Equals("PRESENCIA"))
                        {
                            if (table_2.Rows[index]["Presencia1"].ToString().Equals(""))
                            {
                                table_2.Rows[index]["Presencia1"]=presencia;
                            }
                            else if (table_2.Rows[index]["Presencia2"].ToString().Equals(""))
                            {
                                table_2.Rows[index]["Presencia2"]=presencia;
                            }
                            else if (table_2.Rows[index]["Presencia3"].ToString().Equals(""))
                            {
                                table_2.Rows[index]["Presencia3"] = presencia;
                            }
                            else if (table_2.Rows[index]["Presencia4"].ToString().Equals(""))
                            {
                                table_2.Rows[index]["Presencia4"] = presencia;
                            }
                            else
                            {
                                table_2.Rows[index]["MasPresencia"] = Convert.ToString(extpresen);
                                extpresen++;
                            }

                        }

                        if (table_2.Rows[index]["Sucursal"].ToString().Equals(""))
                        {
                            table_2.Rows[index]["Sucursal"] = sucursal;
                        }

                    }
                    index++;
                }
               
           }

           table_2.AcceptChanges();
           int index2 = 0;

           //Aqui se verifica si no hay nada que impida marcar el dia como asistido 
           foreach (DataRow rowtable_2 in table_2.Rows)
           {
               if (!rowtable_2["Entrada"].ToString().Equals("") && !rowtable_2["Incidencia"].ToString().Equals("") && !rowtable_2["Salida"].ToString().Equals(""))
               {
                   table_2.Rows[index2]["Incidencia"] = "ASISTENCIA";
               }
               else
               {
               }
               index2++;

               foreach (DataRow table_incid_row in table_incid.Rows)
               {
                   if (rowtable_2["Fecha"].ToString().Equals(Convert.ToDateTime(table_incid_row["Fecha"]).ToString("yyyy/MM/dd")))
                   {
                       if(table_incid_row["TipoIncidencia"].ToString().Equals("VAC")){
                       rowtable_2["Incidencia"] = "VACACIONES";
                       }
                       if (table_incid_row["TipoIncidencia"].ToString().Equals("FAL"))
                       {
                           rowtable_2["Incidencia"] = "FALTA";
                       }
                       if (table_incid_row["TipoIncidencia"].ToString().Equals("INC"))
                       {
                           rowtable_2["Incidencia"] = "INCAPACIDAD";
                       }
                       if (table_incid_row["TipoIncidencia"].ToString().Equals("PER"))
                       {
                           rowtable_2["Incidencia"] = "PERMISO";
                       }
                   }
               }
           }

           table_2.AcceptChanges();

            if (!id_user.Equals("-1"))
            {
                DataSet reportDatasetInd = new DataSet();

                reportDatasetInd.Tables.Add(table_2);

                //reportEnSalInd.SetDataSource(table_2);
           
                CrystalDecisions.CrystalReports.Engine.TextObject txtFechaini;
                CrystalDecisions.CrystalReports.Engine.TextObject txtFechafin;

                CrystalDecisions.CrystalReports.Engine.TextObject txtNombreEmpresa;
                CrystalDecisions.CrystalReports.Engine.TextObject txtNombreSucursal;
                CrystalDecisions.CrystalReports.Engine.TextObject txtNombreEmpleado;

                //Elementos del crystal report que se actualizan desde esta seccion de codigo
                //txtFechaini = reportEnSalInd.Section1.ReportObjects["fechaini"] as TextObject;
                //txtFechafin = reportEnSalInd.Section1.ReportObjects["fechafin"] as TextObject;
                //txtFechaini.Text = dateTimePickerPeriodo.Text;
                //txtFechafin.Text = dtFinal.Text;

                //txtNombreEmpresa = reportEnSalInd.Section2.ReportObjects["NombreEmpresa"] as TextObject;
                //txtNombreSucursal = reportEnSalInd.Section2.ReportObjects["NombreSucursal"] as TextObject;
                //txtNombreEmpleado = reportEnSalInd.Section2.ReportObjects["NombreEmpleado"] as TextObject;
                //txtNombreEmpresa.Text = lblNombreEmpresa.Text;
                //txtNombreSucursal.Text = lblNombreSucursal.Text;
                //txtNombreEmpleado.Text = cbUsuario.Text;

                //rpES.rpvEntradasSalidas.ReportSource = reportEnSalInd;
                
            }
            else
            {
                //reportEnSalGen.SetDataSource(table);
                //rpES.rpvEntradasSalidas.ReportSource = reportEnSalGen;
            }
            rpES.rpvEntradasSalidas.RefreshReport();
            rpES.Show();

        }


        private string PrintCellRowAndCol()
        {
            string id_usuario="";
            if (dataGridView1.Rows.Count!=0)
            {
            DataGridViewCell myCell;
            myCell = dataGridView1.CurrentCell;
            if (myCell.Selected)
            {
                Console.WriteLine(myCell.RowIndex);
                Console.WriteLine(myCell.ColumnIndex);
                // Prints the value of the cell through the DataTable.
                DataTable myTable;
                // Assumes the DataGrid is bound to a DataTable.
                myTable = (DataTable)dataGridView1.DataSource;
                Console.WriteLine(myTable.Rows[myCell.RowIndex]
                [myCell.ColumnIndex]);

                //Object xxx = myTable.Rows[myCell.RowIndex][myCell.ColumnIndex];
                DataRow values = myTable.Rows[myCell.RowIndex];

                id_usuario = Convert.ToString(values[0]);

                
            }
            }
            return id_usuario;
       
        }

        private void button1_Click(object sender, EventArgs e)
        {
            PrintCellRowAndCol();
        }

        public void cargarUsuarios(){
            string id_empresa = Settings1.Default.id_empresa;
            string IdSucursal = Settings1.Default.IdSucursal;

            cbUsuario.DataSource = null;
            cbUsuario.Items.Clear();

            ConectaBD conBD = new ConectaBD();
            DataSet ds = conBD.Consulta("Select id_empleado, Nombre,sucursal from empleados_registro_sucursal Where "
            + " id_empresa = '" + id_empresa + "' And IdSucursal = '" + IdSucursal + "' and active_user=1");

            if (ds.Tables.Count == 0)
            {
                MessageBox.Show("Error en la consulta de empleados (T)", "Alta de usuarios", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (ds.Tables["Resultado"].Rows.Count == 0)
            {
                MessageBox.Show("Error en la consulta de empleados (R)", "Alta de usuarios", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            ArrayList arreglo = new ArrayList();
            //arreglo.Add(new ConectaBD.clsEmpleados("All","-1"));
            foreach (DataRow dr2 in ds.Tables["Resultado"].Rows)
            {
                if (dr2["sucursal"].ToString().Equals(IdSucursal))
                {
                    arreglo.Add(new ConectaBD.clsEmpleados(dr2["Nombre"].ToString() + "(+)", dr2["id_empleado"].ToString()));
                }
                else
                {
                    arreglo.Add(new ConectaBD.clsEmpleados(dr2["Nombre"].ToString()+ "(*)", dr2["id_empleado"].ToString()));
                }
                
            }
            label4.Text=conBD.conexioStatus;
            cbUsuario.DataSource = arreglo;
            cbUsuario.DisplayMember = "NombreEmpleado";
            cbUsuario.ValueMember = "id_empleado";
            cbUsuario_SelectedIndexChanged(cbUsuario, System.EventArgs.Empty);

        }

        private void cbUsuario_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void btnbuscar_Click(object sender, EventArgs e)
        {
            string IdUsuario = Convert.ToString(cbUsuario.SelectedValue);
            string id_empresa = Settings1.Default.id_empresa.ToString();
            string IdSucursal = Settings1.Default.IdSucursal;

            string dfin = dtFinal.Value.ToString("yyyyMMdd");
            string dini = dateTimePickerPeriodo.Value.ToString("yyyyMMdd");
            string Anio = dateTimePickerPeriodo.Value.Year.ToString();


            String sql;
            MySqlConnection cn;
            MySqlCommand cm;
            MySqlDataAdapter da;


            if (dtFinal.Value < dateTimePickerPeriodo.Value)
            {
                MessageBox.Show("La fecha final no debe ser menor que la fecha inicial", "Consulta de Incidencias", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }


            if(!IdUsuario.Equals("-1")){
                sql = "SELECT id_sucursal,"
                              + "sc_nombre, empresa,"
                              + "Nombre, TipoRegistro"
                              + ",FechaHoraPC, FechaHoraServer"
                              + ",Fechanow FROM rep_entradas_salidas_ind WHERE "
                              + " id_empleado='" + IdUsuario + "'"
                              + " AND FechaHoraServer between '" + dini + "'  AND '" + dfin + "' "
                              + " AND id_empresa = '" + id_empresa + "' ";
            }else{
                sql = "SELECT id_sucursal,"
                              + "sc_nombre, empresa,"
                              + "Nombre, TipoRegistro"
                              + ",FechaHoraPC, FechaHoraServer"
                              + ",Fechanow FROM rep_entradas_salidas_ind WHERE "
                              + " id_sucursal='" + IdSucursal + "' "
                              + " AND FechaHoraServer between '" + dini + "'  AND '" + dfin+ "' "
                              + " AND id_empresa = '" + id_empresa + "' ";
                btnReporte.Enabled = false;
            }

            cn = new MySqlConnection("Data Source=localhost;Database=pvsfelnet;User ID=root; Password=root; Allow Zero Datetime=True; CHARSET=latin1");
            cn.Open();

            cm = new MySqlCommand();
            cm.CommandText = sql;
            cm.CommandType = CommandType.Text;
            cm.Connection = cn;

            da = new MySqlDataAdapter(cm);
            DataTable data = new DataTable();
            da.Fill(data);
            if (data.Rows.Count != 0)
            {
                dataGridView1.DataSource = data;
                if (!IdUsuario.Equals("-1"))
                    btnReporte.Enabled = true;
            }
            else
            {
                dataGridView1.DataSource = null;

                btnReporte.Enabled = false;
                MessageBox.Show("No se han encontrado registros para este usuario","Entradas y Salidas", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            //dataGridView1.AutoResizeColumnHeadersHeight();
            //dataGridView1.AutoResizeColumns(
            //DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
        }

        private void btnclose_Click(object sender, EventArgs e)
        {
            this.Dispose();
            this.Close();
        }

        private void FormEntradasSalidas_Load(object sender, EventArgs e)
        {

        }

        public void cargarDatosEmpSuc(){

            string IdUsuario = Convert.ToString(cbUsuario.SelectedValue);
            string id_empresa = Settings1.Default.id_empresa.ToString();
            string IdSucursal = Settings1.Default.IdSucursal;
            String sql;
            MySqlConnection cn;
            MySqlCommand cm;
            MySqlDataAdapter da;
            //DataSet ds;
            sql = "Select empresa,sc_nombre from datosempresasucursal where "
                  + " Id_Empresa='" + id_empresa + "' and id_sucursal='"+IdSucursal+"'";
            cn = new MySqlConnection("Data Source=localhost;Database=pvsfelnet;User ID=root; Password=root; Allow Zero Datetime=True; CHARSET=latin1");
            cn.Close();
            cn.Open();

            cm = new MySqlCommand();
            cm.CommandText = sql;
            cm.CommandType = CommandType.Text;
            cm.Connection = cn;

            da = new MySqlDataAdapter(cm);
            da.Fill(datosEmpSuc);

            lblNombreEmpresa.Text = Convert.ToString(datosEmpSuc.Rows[0]["empresa"]);
            lblNombreSucursal.Text = Convert.ToString(datosEmpSuc.Rows[0]["sc_nombre"]);
            
        }

        private void lblstatusconexion_Click(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

    }
}
